perm filename PONTY2.PAL[PNT,HE]1 blob
sn#318487 filedate 1977-11-11 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .TITLE MOVE
C00004 00003 ROUTINE TO EXECUTE A MOVE WITH NO 'AL ROUTINES
C00008 00004 ROUTINE TO DISPLAY CURRENT JOINT ANGLES
C00012 00005 ROUTINE TO DISPLAY CURRENT REFERENCE POWER SUPPLY READINGS
C00014 00006 FORCE SENSING/COMPLIANCE PATCH AREA
C00016 00007 SIMULTANEOUS HAND OPERATION
C00018 00008 LOCAL STORAGE AREA
C00021 ENDMK
C⊗;
.TITLE MOVE
TRANS ==1 ;SET TO 1 TO PRINT OUT EULER AS WELL AS JOINT ANGLES
HANDOP==0 ;=1 FOR SIMULTANEOUS HAND OPERATION
SNGSTP==0 ;CONDITIONAL ASSEMBLY FLAGS FOR ARM.PAL
DIAGY ==0
STDALN==1
TACCAL==0
NOYELW==1
TIMER ==0
ISLIN ==1
FRCDAT==0
.INSRT K1DEF.PAL[11,SYS]
.INSRT ALHEAD.PAL[AL,HE]
.INSRT ARM.PAL[AL,HE]
.INSRT BEJCZY.PAL[AL,HE]
.INSRT ARITH.PAL[AL,HE]
.INSRT IO.PAL[3,BES]
.IFNZ TRANS
.INSRT ARMSOL.PAL[al,he]
.INSRT EULER.PAL[AL,HE]
.IFF
UPDATE:
SOLVE: 0
.ENDC
;COMMUNICATION LINK FOR "TLKEF5", "WHERE" ROUTINE FOR THE PDP10
MASLC5==110100 ;ADDRESS OF MASTER NUMBER TO SIGNAL PDP10 WE ARE ALIVE
TRNADR==110102 ;SAVE TRANSFORM DATA IN HERE
JTSADR==110162 ;SAVE JOINT ANGLES IN HERE
MASTR5==12121 ;CHECK NUMBER TO PDP10
;COMMUNICATION LOCATION BETWEEN MOVE.SAI AND MOVE.PAL
MCLOC== 100000
;DEVICE MECHANISM BITS
YELARM== 1 ;MECHANISM BITS: YELLOW ARM, NOT INCLUDING HAND
YELHND== 2 ;YELLOW HAND
BLUARM== 4 ;BLUE ARM, NOT INCLUDING HAND
BLUHND== 10 ;BLUE HAND
;ROUTINE TO EXECUTE A MOVE WITH NO 'AL ROUTINES
P: CLR PRTMES ;DONT PRINT SERVO DATA BLOCK
CLR JMPFRC ;NO FORCE COMPLIANCE
BR STRT4
M: MOV #1,PRTMES ;PRINT SERVO ERROR MESSAGES
MOV #ASKFRC,SG ;CHECK IF FORCE COMPLIANCE WANTED
JSR PC,TYPSTR
MOV #IOBUF,SG
JSR PC,INSTR
MOV #IOBUF,SG
JSR PC,INTSCN
MOV R0,JMPFRC
STRT4: MOV #1,PRTHDR ;W HEADER NO LONGER ON VT05
MOV #START4,JOBSA
JMP 1000
START4: MOV #DEVICE,R1 ;INITIALIZE BLUE ARM TO RUN
JSR PC,INTARM
TST R0 ;CHECK FOR ERRORS
BEQ MLOOP ;BRANCH IF NO INITIALIZATION ERROR
BADINT: MOV #BADSTR,SG ;ELSE TYPE ERROR MESSAGE
TYPERR: JSR PC,TYPSTR
MOV #IOBUF,SG ;TYPE ERROR CODE
JSR PC,CVO
MOV #IOBUF,SG
JSR PC,TYPSTR
JSR PC,CRLF
CLR MASLC5 ;INDICATE W NOT WORKING
DISMIS
;WAIT LOOP LOOKING AT COMMAND BLOCK FROM PDP10
MLOOP: MOV #12345,MCLOC ;INDICATE ELF READY FOR DATA BLOCK
MWTLP:
.IFNZ HANDOP
TST HANDGO ;HAND STILL GOING?
BNE 1$ ;YES
.ENDC
JSR PC,PRTW ;PRINT THE WHERE LINE
1$: TST KBIS ;CHECK IF ANYONE HIT VT05 KEYBOARD
BEQ MMCHK
CLRB KBIR
CLR MCLOC ;INDICATE DIAG NO LONGER ACTIVE
CLR MASLC5 ;INDICATE W NOT WORKING
DISMIS ;EXIT TO DDT
MMCHK: CMP #54321,MCLOC ;CHECK IF DATA BLOCK ARRIVED
BNE MWTLP
;START OF MOVE CODE
MOV #BARM+BHAND,WLST ;ELSE DO A WHERE FOR THE BLUE ARM
MOV #WLST,R0
MOV #DEVICE,R1
JSR PC,WHERE
TST R0 ;CHECK IF ANY ERRORS
BEQ OKWHER ;BRANCH IF OK
MOV #BADW,SG ;ELSE TYPE ERROR MESSAGE
JMP TYPERR
OKWHER: TST JMPFRC ;DO FORCE COMPLIANCE?
BEQ .+6
JSR PC,FPAT1
.IFNZ HANDOP
FORK #HNDPDB,#SHAND
.ENDC
MOV #MCLOC+4,R0 ;POINT TO COEFFICIENT LIST
MOV #DEVICE,R1 ;POINT TO DEVICE LIST
CMP #76,MCLOC+2 ;MOVE OR CENTER?
BNE CENCOD
JSR PC,MOVE
JMP CENCD2
CENCOD: JSR PC,CENTER
CENCD2: TST JMPFRC ;CLEAR FORCE COMPLIANCE?
BEQ .+6
JSR PC,FPAT2
TST PRTMES ;TYPE OUT STATUS WORD?
BEQ MLOOP ;NO
INC PRTHDR ;INDICATE W HEADER OVERWRITTEN
MOV #COM6,SG ;TYPE OUT STATUS WORD
JSR PC,TYPSTR
MOV #IOBUF,SG
JSR PC,CVO
MOV #IOBUF,SG
JSR PC,TYPSTR
JSR PC,CRLF
MOV DEVICE,R2 ;GET THE NUMBER OF SERVOS ATTACHED
BEQ ENDS4 ;BRANCH IF NONE ATTACHED
MOV #COM7,SG ;ELSE TYPE OUT THE DEVICE BLOCK CONTENTS
JSR PC,TYPSTR
MOV #DEVICE+4,R1 ;START WITH THIS WORD
DEVLP: MOV (R1)+,R0
MOV #IOBUF,SG
JSR PC,CVO
MOV #IOBUF,SG
JSR PC,TYPSTR
JSR PC,CRLF
SOB R2,DEVLP
ENDS4: JMP MLOOP
;ROUTINE TO DISPLAY CURRENT JOINT ANGLES
W: MOV #START2,JOBSA
JMP 1000
START2: MOV #1,PRTHDR ;PRINT THE WHERE HEADER
REDLP: JSR PC,PRTW
TST KBIS ;CHECK IF ANYONE HIT VT05 KEYBOARD
BEQ REDLP
CLRB KBIR
CLR MASLC5 ;INDICATE "WHERE" NOT ACTIVE
DISMIS
;START OF ROUTINE TO PRINT WHERE LINES
PRTW: TST PRTHDR ;NEED TO PRINT HEADER?
BEQ NOHDR
MOV #BARM+BHAND,WLST ;READ ALL BLUE ARM JOINTS
MOV #HEADER,SG ;TYPE OUT COLUMN HEADER
JSR PC,TYPSTR
MOV #8.,R0
MOV #2,R1
JSR PC,FORMAT
CLR PRTHDR
NOHDR: MOV #WLST,R0 ;POINT TO WHERE COEF. LIST
MOV #DEVICE,R1 ;POINT TO DEVICE BLOCK
JSR PC,WHERE ;READ THE CURRENT JOINT ANGLES
TST R0 ;CHECK FOR ERRORS
BEQ GOODW ;BRANCH IF OK
MOV #BADW,SG ;ELSE TYPE ERROR MESSAGE
JMP TYPERR
GOODW: MOV #COM4,SG ;POSITION CURSOR
JSR PC,TYPSTR
MOV #IOBUF,SG ;START BUILDING OUTPUT STRING IN HERE
MOV #BTH,R2 ;GET POINTERS JOINT READINGS
MOV #7,R3 ;7 JOINTS IN ALL
JTCLP: LDF @(R2)+,AC0 ;GET JOINT ANGLE
JSR PC,CVF ;CONVERT JOINT ANGLE TO STRING
SOB R3,JTCLP
MOVB #15,(SG)+ ;PUT IN A CR LF
MOVB #12,(SG)+
MOV #9.,R0 ;CHANGE STRING FORMAT FOR INTEGER NUMBER
CLR R1
JSR PC,FORMAT
MOV #BSRVOS,R1 ;GET POINTERS TO SERVOS
MOV #7,R3 ;CONVERT THE ACTUAL POT READINGS
NEXTP: MOV (R1)+,R0
LDCIF POT(R0),AC0 ;GET A/D READING
TST POT(R0) ;CHECK IF ROUND UP OR DOWN
BLT RNDDN
ADDF #40000,AC0 ;ROUND OFF READING
BR .+6
RNDDN: SUBF #40000,AC0
JSR PC,CVF ;CONVERT TO ASC
SOB R3,NEXTP
JSR PC,RSTFOR
CLRB (SG)
MOV #IOBUF,SG ;TYPE OUT WHOLE STRING
JSR PC,TYPSTR
.IFNZ TRANS
MOV #TRNADR,R0 ;GET CURRENT TRANSFORM IN HERE
MOV #THPTR,R1 ;POINT TO THE CURRENT JOINT ANGLES
MOV #BLUARM,R2 ;USE SOLUTION FOR BLUE ARM
JSR PC,UPDATE ;COMPUTE THE CURRENT TRANSFORM
MOV #TRNADR,R0 ;COMPUTE THE EULER ANGLES
MOV #EANGLE,R1 ;PUT THEM IN HERE
JSR PC,EULER
MOV #IOBUF,SG ;CONVERT TO STRING FOR OUTPUT
MOVB #15,(SG)+ ;PUT IN A CR LF LF
MOVB #12,(SG)+
MOVB #12,(SG)+
MOV #6,R0
MOV #EANGLE,R1
EANGC: LDF (R1)+,AC0
JSR PC,CVF
SOB R0,EANGC ;REPEAT TILL DONE
CLRB (SG)
MOV #IOBUF,SG ;TYPE OUT THE EULER ANGLES
JSR PC,TYPSTR
MOV #BTH,R0 ;TRANSFER THE JOINT ANGLES TO PDP10
MOV #JTSADR,R1 ; COMMUNICATIONS TABLE
MOV #7,R2 ;6 JOINTS + HAND
RHTLP: LDF @(R0)+,AC0
STF AC0,(R1)+
SOB R2,RHTLP
MOV #MASTR5,MASLC5 ;INDICATE TO PDP10 THAT "WHERE" IS WORKING
.ENDC
RTS PC
;ROUTINE TO DISPLAY CURRENT REFERENCE POWER SUPPLY READINGS
REF: MOV #START3,JOBSA
JMP 1000
START3: MOV #COM5,SG ;TYPE OUT THE CALIB. REFERENCE READING
JSR PC,TYPSTR
MOV REFER1,R0 ;GET REF. READING
MOV #IOBUF,SG
JSR PC,CVI
MOVB #54,(SG)+ ;PUT IN A COMMA AND SPACE CHARACTER
MOVB #40,(SG)+
MOV REFER2,R0 ;GET SECOND REF. READING
JSR PC,CVI
MOV #IOBUF,SG ;TYPE THEM OUT
JSR PC,TYPSTR
JSR PC,CRLF
CLR DEVICE ;DON'T READ ANY TACHS
REFLP: MOV #DEVICE,R1 ;READ THE REF. POWER SUPPLY VOLTAGE
JSR PC,SETREF
MOV #REFSG2,SG ;START BUILDING OUTPUT STRING IN HERE
MOV REFVT1,R0 ;GET REFERENCE READINGS AND CONVERT TO ASC
JSR PC,CVI
MOVB #54,(SG)+ ;PUT IN A COMMA AND SPACE CHARACTER
MOVB #40,(SG)+
MOV REFVT2,R0 ;GET THE SECOND READING
JSR PC,CVI
MOVB #40,(SG)+ ;PUT IN A FEW SPACE CHARACTERS
MOVB #40,(SG)+
MOVB #40,(SG)+
MOV #REFSTG,SG ;TYPE OUT WHOLE STRING
JSR PC,TYPSTR
TST KBIS ;CHECK IF ANYONE HIT VT05 KEYBOARD
BEQ REFLP
CLRB KBIR
JSR PC,CRLF
DISMIS
;FORCE SENSING/COMPLIANCE PATCH AREA
FPAT1: MOV #FTABLE+BLUARM,R0;INIT FORCE SENSING SYSTEM
MOV #C,R1 ;RELATIVE FORCE TRANS
JSR PC,SETC
TST R0 ;ERROR?
BEQ 1$
BPT
.IFNZ 0
1$: MOV #BLUARM+XFORCE,R0
LDF FFORCE,AC0
JSR PC,COMPLY
TST R0 ;ERROR?
BEQ 2$
BPT
2$: RTS PC
.BLKW 100
FPAT2: RTS PC
.BLKW 100
.IFF
1$: MOV FBITS,R0
MOV #FPDB,R1
MOV #FSSUB,R2
LDF FFORCE,AC0
JSR PC,FRCSIG
RTS PC
.BLKW 100
FPAT2: MOV FBITS,R0
MOV #FPDB,R1
JSR PC,FRCOFF
RTS PC
.BLKW 100
FSSUB: MOV #FMES,SG
JSR PC,TYPSTR
DISMIS
FBITS: BLUARM+XFORCE+SIGGE
FPDB: PDBLK 3,30,FP
FMES: .ASCIZ /
πFORCE SENSING TRIGGERED
/
.EVEN
.ENDC
FFORCE: .FLT2 0.0
C: .FLT2 1.0,0.0,0.0
.FLT2 0.0,1.0,0.0
.FLT2 0.0,0.0,1.0
.FLT2 0.0,0.0,0.0
;SIMULTANEOUS HAND OPERATION
.IFNZ HANDOP
SHAND: INC HANDGO
LDF CI+SRV14,AC0 ;PUT DYNAMIC COEF. IN DATA LIST
LDF CII+SRV14,AC1
STF AC0,HCI
STF AC1,HCII
MOV #HNDLST,R0 ;HAND COEFFICIENT LIST
MOV #HDEVIC,R1
JSR PC,MOVE
MOV #HMES,SG ;TYPE STATUS CODE
JSR PC,TYPSTR
MOV #HIOBUF,SG
JSR PC,CVO
MOV #HIOBUF,SG
JSR PC,TYPSTR
JSR PC,CRLF
CLR HANDGO
DISMISS
;LOCAL STORAGE AREA
HNDPDB: PDBLK 3,20,FP
HIOBUF: .BLKW 100
HDEVIC: .BLKW 10
HANDGO: 0
HNDLST: BHAND
0
0 ;NO SPECIAL MODES
0 ;NO WOBBLE
40. ;RELATIVE SEGMENT POINTER
5000. ;MOTION TIME
0 ;NO ASSOCIATED TRANS
0 ;NO RUN CODE
.FLT2 0.0
.FLT2 0.0
.FLT2 0.0
.FLT2 20.0
.FLT2 -30.0
.FLT2 12.0
HCI: .FLT2 0.0 ;CI
HCII: .FLT2 0.0 ;CII
0 ;NO OTHER SEGMENTS
HMES: .ASCIZ /
HAND FINISHED, STATUS = /
.EVEN
.ENDC
;LOCAL STORAGE AREA
DEVICE: .BLKW 33 ;DEVICE BLOCK
IOBUF: .BLKW 400.
EANGLE: .BLKW 12.
PRTMES: 0
PRTHDR: 0
JMPFRC: 0
;WHERE COEFFICIENT DATA LIST
WLST: 374 ;JOINT SERVO BIT
0
;OUTPUT STRINGS
COM4: .BYTE 15,32,10,10,10
.IFNZ TRANS
.BYTE 32,10,10,10,32,10,10,10
.ENDC
.BYTE 0
HEADER: .ASCII /
JT 1 JT 2 JT 3 JT 4 JT 5 JT 6 HAND
/
.IFNZ TRANS
.ASCII /
X Y Z O A T
/
.ENDC
.BYTE 0
BADW: .ASCIZ /
SERVO ERROR WHILE ATTEMPTING TO DO A "WHERE", ERROR CODE = /
BADSTR: .ASCIZ /
ARM INITIALIZATION FAILED, ERROR CODE = /
COM5: .ASCIZ /
REF. POWER SUPPLY READINGS DURING CALIBRATION = /
REFSTG: .ASCII /CURRENT REFERENCE READINGS = /
REFSG2: .ASCII / /
.BYTE 15,10,10,10,0
COM6: .ASCIZ /
STATUS WORD = /
COM7: .ASCIZ /THE DEVICE BLOCK SERVO WORDS ARE AS FOLLOWS:
/
EVMES: .ASCII /TOUCH SENSOR EVENT TRIGGERED
/
.BYTE 7,0
ASKFRC: .ASCIZ /
DO FORCE COMPLIANCE (0,1) = /
.EVEN
;MAIN PROGRAM PROCESSOR DESCRIPTOR BLOCK
MAINL: PDBLK 1,100,FP
TEMP == .
. = JOBDAT ;MAIN PROGRAM DESCRIPTOR BLOCK
MAINL
. = JOBSA ;START OF MAIN PROGRAM
START2
. = JOBDM ;JOB DATA AREA MEMORY MAP
USRDM
. = TEMP ;RESTORE LOCATION COUNTER
.END P